package OOM;

import java.util.ArrayList;
import java.util.List;

/**
 * -Xms200m -Xmx200m -XX:+PrintGCDetails -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/home/logs/heapdump.hprof
 */
public class MemoryLeakxxxx {

    public static void main(String[] args) {
      final List<Object> leakList = new ArrayList<>();

        // 模拟一个无限循环，每秒添加一个新的字符串到列表中
        int count=0;
        while (true) {
            byte[] data = new byte[1024 * 1024];
                // 将字节数组添加到静态集合中
                leakList.add(data);
                try {
                    // 短暂休眠以模拟实时环境中的延迟
                    Thread.sleep(800);
                System.out.println("输出"+count++);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
}
/**
 * leakList是一个静态集合，用于持有byte数组的引用。
 * 在main方法中，我们不断地创建1MB大小的byte数组，并将它们添加到leakList中。
 * 由于leakList是静态的，它的生命周期与整个应用程序相同，
 * 因此它持有的所有byte数组对象也不会被垃圾收集器回收。
 * 最终，随着不断添加新的byte数组，堆内存将被耗尽，导致OutOfMemoryError。
 */